package com.suoluo.zenadmin.service.trip;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.suoluo.zenadmin.vo.PageVO;
import com.suoluo.zenadmin.vo.dest.DestFeatureCategoryVO;
import com.suoluo.zenadmin.vo.friend.FriendItemVO;
import com.suoluo.zenadmin.vo.trip.TripDailyFormVO;
import com.suoluo.zenadmin.vo.trip.TripDailyLocationsVO;
import com.suoluo.zenadmin.vo.trip.TripDailyVO;
import com.suoluo.zenadmin.vo.trip.TripFlightFormVO;
import com.suoluo.zenadmin.vo.trip.TripFlightVO;
import com.suoluo.zenadmin.vo.trip.TripLocationVO;
import com.suoluo.zenadmin.vo.trip.TripTripdestsVO;
import com.suoluo.zenadmin.vo.trip.TripVO;
import com.suoluo.zenadmin.vo.trip.TripdestVO;
import com.suoluo.zenadmin.vo.trip.UpdateTripDailyLocationVO;
import com.suoluo.zenadmin.vo.trip.UpdateTripTripdestVO;

public interface TripService {
	/**
	 * 修改行程前，更新行程的状态为不可用状态
	 * @param tripId
	 */
	public void updateTripEnable(int tripId);
	
	
	
	/************************************行程改版的Service接口******************************************/
	/**
	 * 查询行程目的地集合
	 */
	public List<TripdestVO> findListTripdest(int start,int rows,String destName);
	/**
	 * 统计行程目的地总数
	 * @return
	 */
	public int findTripdestCount(String destName);
	/**
	 * 查询指定行程目的地信息
	 * @param tripdestId
	 * @return
	 */
	public TripdestVO findTripdestById(int tripdestId);
	/**
	 * 更新行程目的地信息
	 * @param tripdest
	 */
	public void updateTripdest(TripdestVO tripdest);
	/**
	 * 查询行程目的地地点信息
	 * @param destId 
	 * @param start
	 * @param rows
	 * @return
	 */
	public List<TripLocationVO> findListTripLocation(int tripdestId,int start,int rows,String locationName);
	/**
	 * 同步系统目的地到行程目的地中
	 * @return int 同步的记录数
	 */
	public int updateSyncRemainSysDests();
	
	/**
	 * 同步系统的地点到行程的地点中
	 * @return
	 */
	public int updateSyncTripdestLocations(TripdestVO tripdest);
	/**
	 * 统计行程目的地的地点数
	 * @param tripdestId
	 * @return
	 */
	public int findTripLocationCount(int tripdestId,String locationName);
	/**
	 * 查询指定行程地点信息
	 * @param locationId
	 * @return
	 */
	public TripLocationVO findTripLocationById(int locationId);
	/**
	 * 更新行程地点信息
	 * @param location
	 */
	public void updateTripLocation(TripLocationVO location);
	/**
	 * 同步目的地交通信息
	 * @param tripdest
	 * @return
	 */
	public int updateSyncTripdestTraffic(TripdestVO tripdest);
	
	/**
	 * 查询行程关联的目的地
	 * @param tripId
	 * @return
	 */
	public List<TripTripdestsVO> findTripTripdestsByTripId(int tripId);
	
	/**
	 * 查询行程集合
	 * @return
	 */
	public List<TripVO> findListTrip(int start,int rows);
	
	/**
	 * 查询每页的行程记录
	 * @return
	 */
	public List<TripVO> findAuditedPageTrips(int page,int pageRows);
	
	/**
	 * 统计已创建完成的行程记录数
	 * @return
	 */
	public int findTripCount();
	
	/**
	 * 查询审核通过的行程数量
	 * @return
	 */
	public int findAuditedTripCount();
	
	/**
	 * 更新行程的状态
	 * @param tripId
	 * @param status
	 */
	public void updateTripStatus(int tripId,int status);
	
	/**
	 * 查询审核通过的行程目的地，根据custom,id排序
	 * @return
	 */
	public List<TripdestVO> findAuditedTripdests();
	
	/**
	 * 根据Id查询指定行程信息
	 * @param tripId
	 * @return
	 */
	public TripVO findTripById(int tripId);
	/**
	 * 后台更新行程表基础信息
	 * @param trip
	 */
	public void updateTrip(TripVO trip);
	
	/**
	 * 更新行程的目的地
	 * <li>0.如果行程不存在则需要创建一条行程
	 * <li>1.删除行程关联的目的地,并且行程上该目的点上的地点
	 * <li>2.添加行程关联的目的地
	 * <li>3.添加自定义行程目的地，并且关联到行程上面
	 * @param updateVO 更新的数据
	 */
	public void updateTripTripdests(UpdateTripTripdestVO updateVO);
	
	/**
	 * 查询行程第二步的行程地点和行程天
	 */
	public List<TripDailyVO> findTripDailiyAndLocations(int tripId);
	
	/**
	 * 查询行程目的地下的类别列表
	 * @param tripdestId
	 * @return
	 */
	public List<DestFeatureCategoryVO> findTripdestCategorys(int tripdestId);
	
	/**
	 * 查询目的地下的同一类别的目的地地点，并且该地点是审核通过的
	 * @param tripdestId
	 * @param categoryId
	 * @return
	 */
	public List<TripLocationVO> findAuditedTripLocations(int tripdestId,int categoryId);
	
	/**
	 * 更新行程每天关联的地点
	 * @param updateVO
	 */
	public void updateTripDailyLocations(UpdateTripDailyLocationVO updateVO);
	
	/**
	 * 更新行程的顺序
	 * <li>1.调整行程的顺序
	 * <li>2.生成行程的名称，和图片
	 * @param sortVO
	 */
	public void updateTripSort(UpdateTripDailyLocationVO updateVO);
	
	/**
	 * 根据行程编号查询行程的天
	 * @param tripId
	 * @return
	 */
	public List<TripDailyVO> findTripDailys(int tripId);
	
	/**
	 * 查询行程下的目的地
	 * @param tripId
	 * @return
	 */
	public List<TripDailyLocationsVO> findTripLocations(int tripId);
	
	/**
	 * 查询行程的航班
	 * @param tripId
	 * @return
	 */
	public List<TripFlightVO> findTripFights(int tripId);
	
	/***********************行程编辑接口***start**************************/
	/**
	 * 查询所有航空公司信息
	 * @return
	 */
	public List<FriendItemVO> findListAirline();
	
	/**
	 * 更新行程的描述信息
	 * @param tripVO
	 */
	public void updateTripContent(TripVO tripVO);
	/**
	 * 保存行程的航空信息	
	 * @param flightVO
	 * @return
	 */
	public void saveFlight(TripFlightFormVO flightVO);
	/**
	 * 保存行程的每天行程信息
	 * @param dailyVO
	 */
	public void saveDaily(TripDailyFormVO dailyFormVO); 
	
	/**
	 * 更新行程的名称和图片
	 * @param tripVO
	 */
	public void updateTripImage(TripVO tripVO,MultipartFile file);
	/**
	 * 删除航班信息
	 * @param flightId
	 */
	public void deleteFlight(int flightId);
	/**
	 * 查询每天行程的信息
	 * @param dailyId
	 * @return
	 */
	public TripDailyVO findTripDailyById(int dailyId);
	/**
	 * 查询每天行程下的自定义地点
	 * @param dailyId
	 * @return
	 */
	public List<TripDailyLocationsVO> findDailyLocations(int dailyId);
	
	
	/**
	 * 更新每日行程信息
	 * @param dailyVO
	 */
	public void updateTripDaily(TripDailyFormVO dailyVO);
	
	/**
	 * 更新自定义地点的图片
	 * @param locationId
	 * @param file
	 */
	public void updateLocationImage(int locationId,MultipartFile file);
	
	/**
	 * 发布行程最后一步  更新行程为可用状态
	 * @param tripId
	 */
	public void updateTripStatus(int tripId);
	/**
	 * 查询过期的行程信息
	 * @return
	 */
	public List<TripVO> findListExpireTrip(PageVO page);
	/**
	 * 统计过期行程数量
	 * @return
	 */
	public int findExpireTripCount();
	/***********************行程编辑接口***end**************************/
	
	public List<TripdestVO> findListTripDests();
}
